package parts4.lesson40;

/**
 * 负责数据保存
 * 给Data对象加上同步
 */
public class Data {
    private String title;
    private String note;
    //flag=true，表示允许生产，但是不允许消费者取走
    //flag=false，表示生产完毕，允许消费者取走，但是不能生产
    private boolean flag = false;

    public synchronized void get() throws InterruptedException {
        if (this.flag == false) {
            //已经生产了，所以不允许重复生产
            super.wait();
        }
        try {
            Thread.sleep(400);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(this.title + "=" + this.note);
        //表示已经被取走了，可以再生产了
        this.flag = false;
        //唤醒等待的其他线程
        super.notify();
    }

    public synchronized void set(String title, String note) throws InterruptedException {
        if (this.flag == true) {
            //现在不允许消费者取走了
            super.wait();
        }
        this.title = title;
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.note = note;
        //表示生产完了，等待被取走，继续生产吧
        this.flag = true;
        //唤醒其他进程
        super.notify();
    }

}
